#include <stdio.h>
#include <stdlib.h>
#include <string.h>

// 栈元素类型
typedef int StackElementType;
// 栈的结构
typedef struct {
    StackElementType *data;
    int top;
    int capacity;
} SqStack;

// 初始化栈
void InitStack(SqStack *&s, int capacity);
// 销毁栈
void DestroyStack(SqStack *&s);
// 判断栈是否为空, 空返回true，否则返回false
bool StackEmpty(SqStack *s);
// 进栈, e为要进栈的元素, 进栈成功返回true，否则返回false
bool Push(SqStack *&s, StackElementType e);
// 出栈, 将栈顶元素出栈到e中, 出栈成功返回true，否则返回false
bool Pop(SqStack *&s, StackElementType &e);
// 取栈顶元素, 将栈顶元素赋值给e, 取栈顶元素成功返回true，否则返回false
bool GetTop(SqStack *s, StackElementType &e);

int main() {
    SqStack *s;
    InitStack(s, 100);
    for (;;) {
        char op[10];
        scanf("%s", op);
        StackElementType e;
        // 如果是push操作
        if (strcmp(op, "push") == 0) {
            scanf("%d", &e);
            if (!Push(s, e)) {
                printf("error\n");
            }
        } else if (strcmp(op, "pop") == 0) {
            // 如果是pop操作
            if (StackEmpty(s)) {
                printf("error\n");
            } else {
                Pop(s, e);
                printf("%d\n", e);
            }
        } else if (strcmp(op, "empty") == 0) {
            // 如果是empty操作
            if (StackEmpty(s)) {
                printf("yes\n");
            } else {
                printf("no\n");
            }
        } else if (strcmp(op, "query") == 0) {
            // 如果是query操作
            if (StackEmpty(s)) {
                printf("error\n");
            } else {
                GetTop(s, e);
                printf("%d\n", e);
            }
        } else if (strcmp(op, "exit") == 0) {
            // 如果是exit操作
            break;
        }
    }
    
    DestroyStack(s);
    return 0;
}
/* 请在这里填写答案 */

// 初始化栈
void InitStack(SqStack *&s, int capacity) {
    // 分配栈
    s = (SqStack*)malloc(sizeof(SqStack));
    // 分配栈元素
    s->data = (StackElementType *)calloc(capacity, sizeof(StackElementType));
    s->capacity = capacity;
    s->top = -1;
}
// 销毁栈
void DestroyStack(SqStack *&s) {
    free(s->data);
    free(s);
    s = NULL;
}
// 判断栈是否为空, 空返回true，否则返回false
bool StackEmpty(SqStack *s) {
}
// 进栈, e为要进栈的元素, 进栈成功返回true，否则返回false
bool Push(SqStack *&s, StackElementType e) {
}
// 出栈, 将栈顶元素出栈到e中, 出栈成功返回true，否则返回false
bool Pop(SqStack *&s, StackElementType &e) {
}
// 取栈顶元素, 将栈顶元素赋值给e, 取栈顶元素成功返回true，否则返回false
bool GetTop(SqStack *s, StackElementType &e) {
}